<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //严格模式特性：
      //严格模式通过抛出错误来消除了一些原有静默错误。
      //严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷：有时候，相同的代码，严格模式可以比非严格模式下运行得更快。
      //严格模式禁用了在ECMAScript的未来版本中可能会定义的一些语法

      //开启严格模式：在函数中加入'use strict'
      'use strict'
      console.log('严格模式')
      //把"use strict"放在脚本的第一行，则整个script块或文件都将以严格模式进行
    </script>
    <script>
      function strict() {
        'use strict'
        console.log('严格模式')
      }
      function normaFunction() {
        console.log('正常模式')
      }
    </script>
    <script>
      //严格模式的规则：
      //1、变量声明必须使用关键字;
      'use strict' //启用严格模式
      var m = 100 //定义变量m
      n = 200 //定义全局变量n，严格模式下，这是错误的

      //2、with被禁止使用
      var obj = { a: 1, b: 2, c: 3 }
      obj.a = 4
      obj.b = 5
      obj.c = 6
      //设置obj为特定作用域中可直接访问的成员对象，方便访问obj
      with (obj) {
        a = 4
        ;(b = 5), (c = 6)
      }
      //严格模式下不允许使用with，因为这样可能会导致性能下降与潜在安全风险

      //3、强制开启eval作用域
    </script>
  </body>
</html>
